#include <iostream>
#include <cstring>
using namespace std;
const int N=2*1e5+10;

int h[N],ne[N],to[N],idx;
int dis[N/2];
int rt=0;
int maxd=0;
void add(int x,int y)
{
	ne[idx]=h[x];
	to[idx]=y;
	h[x]=idx++;
}
void dfs(int u,int fa,int d)
{
	dis[u]=d;
	if(dis[u]>dis[rt])
		rt=u;
	if(dis[u]>maxd)
		maxd=dis[u];
	for(int i=h[u];~i;i=ne[i])
	{
		int j=to[i];
		if(j==fa)
			continue;
		dfs(j,u,d+1);
	}
}
int main()
{
	int n;
	cin>>n;
	
	memset(h,-1,sizeof(h));
	int u;
	for(int i=0;i<n-1;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		u=a;
		add(a,b);
		add(b,a);
	}
	
	dfs(u,0,0);
	
	maxd=0;
	memset(dis,0,sizeof(dis));

	dfs(rt,0,1);
	
	cout<<maxd-1<<endl;
	return 0;
}
